﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Talento21.Modelo;

namespace Talento21.Negocio.Servicio
{
    public class SrvPersona
    {

        SysGestion21Entities db;

        public SrvPersona()
            : this(new SysGestion21Entities())
        {

        }

        public SrvPersona(SysGestion21Entities context)
        {
            db = context;
        }

        public void Crear(InfPersonas persona)
        {
            db.AddToInfPersonas(persona);
            db.SaveChanges();
        }

        public List<InfPersonas> ListarPersonas()
        {
            return (from personas in db.InfPersonas select personas).ToList();
        }

        public InfPersonas ObtenerPersonaPorRut(int rutPersona, string dv)
        {
            return (from persona in db.InfPersonas where persona.Rut == rutPersona && persona.Dv == dv select persona).FirstOrDefault();
        }

        public InfPersonas ObtenerPersonaPorRutYEmpresa(int rutPersona, string dv, int emp_rut)
        {
            return (from persona in db.InfPersonas where persona.Rut == rutPersona && persona.Dv == dv && persona.InfEmpresas.Emp_rut == emp_rut select persona).FirstOrDefault();
        }

        public List<InfPersonas> ObtenerPersonaPorRutYEmpresa(int rutPersona, int emp_rut)
        {
            return (from persona in db.InfPersonas where persona.Rut == rutPersona && persona.InfEmpresas.Emp_rut == emp_rut select persona).ToList();
        }

        public List<InfPersonas> ObtenerPersonaPorNombreYEmpresa(string nombre, int emp_rut)
        {
            return (from persona in db.InfPersonas where persona.InfEmpresas.Emp_rut == emp_rut && persona.Nombre.StartsWith(nombre) select persona).ToList();
        }

        public List<InfPersonas> ObtenerPersonaPorNombreRutYEmpresa(string nombre, int emp_rut, int rutPersona)
        {
            if (nombre != null && rutPersona == 0)
            {
                return (from persona in db.InfPersonas where persona.InfEmpresas.Emp_rut == emp_rut && persona.Nombre.StartsWith(nombre) select persona).ToList();
            }

            if (nombre == null && rutPersona > 0)
            {
                return (from persona in db.InfPersonas where persona.InfEmpresas.Emp_rut == emp_rut && persona.Rut == rutPersona select persona).ToList();
            }
            else
            {
                return (from persona in db.InfPersonas where persona.InfEmpresas.Emp_rut == emp_rut select persona).ToList();
            }
        }


        public List<InfPersonas> ObtenerPersonasAsignadasEvaluador(int id_evaluador)
        {

            return ((List<InfPersonas>)(from personasEvaluador in db.InfPersonaEvaluador where personasEvaluador.Id_Evaluador == id_evaluador select personasEvaluador.InfPersonas).ToList());

        }


        public void ModificarPersona(InfPersonas persona)
        {
            //db.Attach(persona);
            //db.ApplyPropertyChanges("InfPersonas", persona);
            //db.SaveChanges();
        }
    }
}